home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
SPACE 2
/
SPACE - Library 2 - Volume 1.iso
/
program
/
561
/
prolog
/
toydemos
< prev
next >
Wrap
Text File
|
1991-09-08
|
3KB
|
82 lines
% Demos für TOY Prolog, 19jun86 JJK
% Grafik-Demonstration (Aufruf von VDI-Funktionen)
% Aufruf mit : mmove
% Abbruch mit ShiftAltHelp
mmove :- window, mmove(0, 0).
mmove(OldX, OldY) :- wait(OldX, OldY, NewX, NewY), erase(OldX, OldY),
draw(NewX, NewY), mmove(NewX, NewY).
wait(OX, OY, NX, NY) :- repeat, grf_mse_state(_,NX,NY), not (OX=NX, OY=NY), !.
erase(X, Y) :- sum(X, 32, X1), sum(Y, 32, Y1), grf_box(X, Y, X1, Y1).
draw(X, Y) :- sum(X, 32, X1), sum(Y, 32, Y1), grf_rbox(X, Y, X1, Y1).
window :- grf_mode, grf_mse_hide, grf_clip(0, 0, 0, 0, 0), grf_f_type(2),
grf_f_style(4), grf_box(0, 0, 639, 399), grf_f_type(0),
grf_bar(100, 100, 540, 300), grf_clip(1, 101, 101, 539, 299).
% Zugriff auf das Diskettendirectory
% Aufruf mit : directory
% oder : directory( Pfadname )
% Directory mit Angabe des Pfadnamens :
directory(PName) :- disk_dir(OldPName), % alten Pfadnamen in OldPName retten
disk_dir(PName), % neuen Pfadnamen aktivieren
directory, % Hauptfunktion aufrufen
disk_dir(OldPName). % alten Pfadnamen wiederherstellen
% Directory vom aktuellen Pfad :
directory :- display('Directory of '), disk_dir(X), display(X), nl,
% Pfadnamen anzeigen
disk_search(*.*, 255, FirstName, FirstAttr),
% ersten Dateinamen suchen
directory(FirstName, FirstAttr).
% ersten Dateinamen anzeigen und weitersuchen
% Hilfsfunktion : aktuelle Datei anzeigen, nächste Datei suchen;
% rekursiver Aufruf für die nächste Datei, bis keine mehr
% gefunden wird.
directory(Name, Attr) :- namattr(Name, Attr), % anzeigen aktuelle Datei
disk_search(NName, NAttr), % nächste Datei suchen
directory(NName, NAttr). % und weiter geht's
% falls keine Datei mehr da ist, schlägt disk_search/2 fehl, und dann ...
directory(_, _) :- nl. % Zum Schluß noch eine Leerzeile
% Hilfsfunktion : aktuellen Dateinamen und Attribut anzeigen
namattr(Name, Attr) :- display(Name), % Namen anzeigen
pname(Name, String), % wieviele Zeichen hat der Name ?
length(String, Length),
Tab is 16 - Length, % Tabulator berechnen
tab(Tab), % genausoviele Leerzeichen ausgeben
display(Attr), nl. % Attribut anzeigen, fertig.
% Und jetzt noch eine kleine Tabulatorfunktion :
tab(0) :- !. % 0 Leerzeichen braucht man nicht auszugeben.
tab(N) :- wch(' '), % Wie gibt man N Leerzeichen aus ? Eines hinschreiben ...
N1 is N - 1,
tab(N1). % ... und nochmal N-1 Leerzeichen ausgeben.
% (Wie man sieht, ist Prolog nichts für diejenigen, die zusammenzucken,
% wenn sie das Wort "Rekursion" hören - solche Leute gibt es, ich treffe
% jeden Tag welche !)
end.